package com.jlf.core.annotation;

import java.lang.annotation.*;

/**
 * 领域模型类的声明注解
 *
 * @author wujr
 * 2023/7/4
 * @version 1.0
 * 【变更历史】
 * [wujr 2023/7/4 1.0 新增]
 */
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Domain {
    /**
     * 该领域模型的编码，领域的编码具有唯一性
     * @return 领域编码
     */
    String code();

    /**
     * 该领域模型的名称，一般为中文名称
     * 空则取code作为名称
     * @return 领域名称
     */
    String name() default "";

    /**
     * 该领域模型的存储的数据表名称
     * 空表示根据code自动解析，并自动添加前缀：t_
     * 例如：code = UserRole，则数据表默认为：t_user_role，即把code转换为下划线方式拼接
     * @return 数据表
     */
    String table() default "";

    /**
     * 版本
     * @return 模型版本
     */
    int version() default 1;

    /**
     * 数据表名称的前缀，table为空时有效
     * @return 数据表名称前缀
     */
    String tablePrefix() default "t_";

    /**
     * 数据表名称的后缀，table为空时有效
     * @return 数据表名称的后缀
     */
    String tableSuffix() default "";

    /**
     * 是否根据记录版本进行加锁更新，默认为false
     * @return true表示需要根据版本号进行更新
     */
    boolean lockByVersion() default false;

    String schema() default "";

    boolean keepGlobalPrefix() default false;

    String resultMap() default "";

    boolean autoResultMap() default false;

    String[] excludeProperty() default {};

}
